Ukoncenie aplikacie

Otázka od: Martin Kasman

13. 11. 2002 21:20

Mam handle inej aplikacie. Ako ju ukoncim?

Vdaka za kazdu radu.

Odpovedá: Ján Harman

13. 11. 2002 21:51

Mozna by slo pouzit i TerminateProcess, podivej se do helpu.

> Mam handle inej aplikacie. Ako ju ukoncim?
>
> Vdaka za kazdu radu.
>
>
>

Odpovedá: Ján Harman

13. 11. 2002 22:18

prave projizdim toto
http://codecentral.borland.com/codecentral/ccweb.exe/prodcat?prodid=1&catid=
4 a najdi si tam Programmatically closing another application. nevim co to
je, ale treba pomuze.

> Mam handle inej aplikacie. Ako ju ukoncim?
>
> Vdaka za kazdu radu.
>
>
>

Odpovedá: Petr Langer

14. 11. 2002 10:26

No uplne "koser" to nebude nikdy, ale prvni bys te aplikaci mel dat sanci,
aby se ukoncila sama a pokud na to nebude v danem case (dwTimeout) reagovat,
tak ji "odstrelis". Ja pro jistotu posilam WM_CLOSE vsem oknum dane
aplikace, ale nevim, jestli je to nezbytne nutne. mozna by stacilo to poslat
jenom hlavnimu.

Muj kod vypada asi takto (dwPID je Process ID):


function TerminateProcessEnum(Window: HWnd; Data: Longint): Bool; stdcall;
const WM_CLOSE = $10;
var
  dwID : DWORD;
  retVal : LRESULT;
  retRes : DWORD;
begin
  GetWindowThreadProcessId(window, @dwID) ; // gets processID to
which the window belongs to

  if (dwID = Data) then // if processID for
window = our watched process ID
     retVal := SendMessageTimeout(window, WM_CLOSE, 0, 0, SMTO_ABORTIFHUNG
And SMTO_BLOCK, 1000, retRes);

  Result := true ;
end;


function killProcess(dwPID : DWORD) : integer;
var
  hProc : LongWord;
  dwRet, dwTimeout : DWORD;
begin
  dwTimeout := 5000;

  hProc := OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, FALSE, dwPID);
  EnumWindows(@TerminateProcessEnum, dwPID) ; // enumerate all
windows for process (calls TerminateProcessEnum)

  if (WaitForSingleObject(hProc, dwTimeout)<> WAIT_OBJECT_0) then //
check if it is really down
   begin
     if (TerminateProcess(hProc,0)) then // if not, then just
kill it without remorse
        dwRet := 1 // successful kill
     else
        dwRet := 2; // not successful
   end
  else
     dwRet := 0; // Accepted WM_CLOSE = normal process end

  CloseHandle(hProc) ;

  Result := dwRet ;
end;

HTH
    Petr Langer


----- Original Message -----
From: "Martin Kasman" <martinkasman@centrum.sk>
Subject: Ukoncenie aplikacie


> Mam handle inej aplikacie. Ako ju ukoncim?

Odpovedá: Pavel ZIDEK

16. 11. 2002 6:59

if Handle <> 0 then
  PostMessage(Handle, WM_QUIT, 0, 0)

----- Pavel ZIDEK -----
http://www.kopr.cz/delphi, delphi@kopr.cz





> Mam handle inej aplikacie. Ako ju ukoncim?
>
> Vdaka za kazdu radu.

Odpovedá: Petr Vones

17. 11. 2002 14:19

From: "Martin Kasman" <martinkasman@centrum.sk>
> Mam handle inej aplikacie. Ako ju ukoncim?

Handle ceho, procesu po otevreni pomoci jeho Process ID ?

Petr Vones